package configure

import (
	"os"
	"path"
	"time"

	"gitee.com/xgotool/backend-framework-template/config"
	"gitee.com/xiaoyutab/xgotool/individual/xginplus"
)

// 获取图片信息
//
//	GET	system/configure/file
func File(c *xginplus.Context) *xginplus.Response {
	type temp_struct struct {
		Path string `json:"path" form:"path" xml:"path"` // 文件地址
	}
	temp := temp_struct{}
	if err := c.Bind(&temp); err != nil {
		return c.Error(err)
	}
	type temp_struct_used struct {
		Path string // 文件地址
	}
	param := temp_struct_used{}
	// 参数赋值
	param.Path = temp.Path
	// ApiPost软件所需要的参数描述格式:
	// [{"is_checked":1,"not_null":1,"key":"path","type":"Text","field_type":"String","value":"","description":"文件地址"}]
	// ApiFox软件所需要的参数描述格式:（此软件需要的参数为多行形式，请手动去除最前面的//和空格，再行复制）
	// "path","string","true","","","文件地址"
	// 其他软件所需要的KV键值对描述:
	// {"path":"文件地址"}
	// 本命令执行参数【留做备份，以便后期使用/修改】
	// path string 文件地址 v=required x.ginplus
	// 参数效验部分
	if param.Path == "" {
		return c.Errorf("文件地址(path) 不能为空")
	}

	// 此上为控制器的参数验证逻辑，代码生成：https://xiaoyutab.cn/#/tool/go/cpp
	ext := config.GetExt()
	if ext.Upload.Domain == "" {
		fs, err := os.Stat(ext.Upload.Path + "/" + param.Path)
		if err != nil || fs.IsDir() {
			return c.Errorf("文件 %s 不存在", param.Path)
		}
		return c.DownloadFs(&xginplus.DFS{
			Name: path.Base(param.Path),
			Size: fs.Size(),
			Path: []string{
				ext.Upload.Path + param.Path,
			},
			CacheTime: time.Hour * 24 * 30,
		})
	}
	c.Redirect(302, ext.Upload.Domain+"/"+param.Path)
	return nil
}
